<!DOCTYPE html>
<html>

<head>
  <!-- USE DEVELOPMENT VERSION -->
  <script src="/konva.min.js"></script>
  <meta charset="utf-8" />
  <title>Konva forceUpdate 强制更新边界框、节点</title>
  <style>
    body {
      margin: 0;
      padding: 0;
      overflow: hidden;
      background-color: #f0f0f0;
    }
  </style>
</head>

<body>
  <button id="h2">改变矩形尺寸</button>
  <hr>
  <div id="container"></div>
  <script>
    var width = window.innerWidth
    var height = window.innerHeight

    var stage = new Konva.Stage({
      container: 'container',
      width: width,
      height: height
    })

    var layer = new Konva.Layer()
    stage.add(layer)

    var rect = new Konva.Rect({
      x: 200,
      y: 200,
      width: 300,
      height: 300,
      fill: 'red',
      draggable: true
    })

    var tr = new Konva.Transformer({
      node: rect,
      anchorStroke: '#0000ff',
      anchorFill: 'yellow',
      anchorSize: 20,
      borderStroke: '#ff0000',
      borderDash: [5, 5]
    })

    layer.add(rect)
    layer.add(tr)

    layer.draw()

    /* 
     forceUpdate 的作用
        动态改变被变换节点：如果在运行时动态地改变了被变换节点的尺寸、位置或旋转角度，而没有通过 Transformer 进行这些改变，那么 Transformer 的边界框可能不会自动更新以反映这些变化。

        外部更新：如果被变换节点被外部代码（例如，不是通过 Transformer 的交互）更新，Transformer 可能需要手动调用 forceUpdate 来同步其状态。
    */
    // 点击后会改变矩形的尺寸
    document.getElementById('h2').addEventListener('click', function () {
      rect.width(rect.width() + 20)
      rect.height(rect.height() + 20)
      tr.forceUpdate() // 调用 forceUpdate 来更新 Transformer 的边界框
      layer.draw() // 重绘画布
    });
  </script>
</body>

</html>